package com.baichang.taoshunda.dao;

import com.baichang.taoshunda.entity.Goods;
import com.baichang.framework.dao.BaseDao;
import com.baichang.framework.model.Page;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

public interface GoodsDao extends BaseDao<Goods> {
    /**
     * 活动下查询商品
     *
     * @param goodsBusId
     * @param type
     * @param goodsName
     * @param nowPage
     * @param pageSize   @return
     */
    Page queryOutGoods(String goodsBusId, Integer type, String goodsName, int nowPage, int pageSize);

    /**
     * 广告位下的商品
     *
     * @param id
     * @param nowPage
     * @param pageSize
     * @return
     */
    Page queryOutCarouselGoods(Integer id, Integer type, int nowPage, int pageSize);

    /**
     * 查询商品
     *
     * @param nowPage
     * @param pageSize
     * @param goodsName
     * @param busName
     * @param type      @return
     * @param business
     */
    Page queryGoods(int nowPage, int pageSize, String goodsName, String busName, Integer type, Integer business);

    /**
     * 商品下架
     *
     * @param id
     * @param isUpper
     * @return
     */
    int updateIsUpper(Integer id, Integer isUpper);

    /**
     * 查询商品交易记录
     *
     * @param id
     * @param nowPage
     * @param pageSize
     * @return
     */
    Page queryGoodsOrder(Integer id, int nowPage, int pageSize);

    /**
     * 下架和新添加的商品
     *
     * @param nowPage
     * @param pageSize
     * @param goodsName
     * @param busName
     * @param businessId
     * @param type       @return
     */
    Page queryNewOrOldGoods(int nowPage, int pageSize, String goodsName, String busName, Integer businessId, Integer type);

    Integer getCompanyGoodsNumber(Integer companyId);

    /**
     * 退款后增加商品数量
     *
     * @param goodsId
     * @param stock
     * @return
     */
    int updateGoodsCount(Integer goodsId, Integer stock);


    /**
     * 根据商品类别编号与用户购物车查询商品列表
     *
     * @param typeId
     * @param userId
     * @return
     */
    List<Map<String, Object>> findGoodsListByTypeIdAndShopCar(Integer typeId, Integer userId);

    Goods getGoodsById(Integer goodsId);

    /**
     * 查看商家商品分类下是否存在商品
     *
     * @param id
     * @return
     */
    int getGoodsCountByGoodsTypeId(Integer id);

    /**
     * 商家商品分类下的 商品
     *
     * @param bussId
     * @param goodsTypeId
     * @return
     */
    List<Map<String, Object>> findGoodsList(Integer bussId, Integer goodsTypeId);

    /**
     * 修改商品
     *  @param id
     * @param name
     * @param price
     * @param bagging
     * @param headPic
     * @param images
     * @param unit
     * @param isBespeak
     * @param isHomeInstallation
     * @param isNoReasonReturn
     * @param goodsDetails
     * @param commercialActivities
     * @param isFree
     * @param isInvoice
     * @param bannerImages         @return
     * @param goodsVideo
     * @param goodsVideoImg
     */
    boolean updateGoods(Integer id, String name, Double price, Double bagging, String headPic, String images, String unit, Integer isBespeak, Integer isHomeInstallation, Integer isNoReasonReturn, String goodsDetails, String commercialActivities, Integer isFree, Integer isInvoice, String bannerImages, String goodsVideo, String goodsVideoImg);

    /**
     * 删除商品
     *
     * @param id
     * @param status
     * @return
     */
    int updateGoodsStatus(String id, int status);

    /**
     * 修改上下架状态
     *
     * @param id
     * @param isUpper
     * @return
     */
    boolean updateGoodsIsUpper(Integer id, int isUpper);

    /**
     * 修改商家商品的月售量
     *
     * @param goodsId
     * @param number
     * @return
     */
    void updateSaleNum(int goodsId, int number);

    /**
     * 修改商品排序
     *
     * @param goodsId
     * @param orderNumber
     * @return
     */
    int updateGoodsOrderNumber(Integer goodsId, Integer orderNumber);

    /**
     * 通过关键字查询商品
     *
     * @param nowPage  当前页
     * @param pageSize 每页条数
     * @param cityId   城市编号
     * @param key      关键字
     * @return
     */
    List<Map<String, Object>> getGoodsByKey(int nowPage, int pageSize, int cityId, String key);

    /**
     * 查询商品详细
     *
     * @param goodsId
     * @param nowPage
     * @param pageSize
     * @return
     */
    Page queryGoodsDetails(Integer goodsId, int nowPage, int pageSize);

    /**
     * 广告位下商品
     *
     * @param goodsId
     * @param nowPage
     * @param pageSize
     * @return
     */
    Page queryCarouselGoods(String goodsId, int nowPage, int pageSize);

    /**
     * 修改商品城市编号
     *
     * @param minCityId
     * @param id
     */
    void updateGoodsCity(int minCityId, Integer id);

    /**
     * 特价商品
     *  @param cityId
     * @param nowPage
     * @param pageSize
     * @param uLng
     * @param uLat     @return
     * @param distance
     */
    List<Map<String, Object>> getSpecialGoods(int cityId, int nowPage, int pageSize, String uLng, String uLat, int distance);

    /**
     * 获取分类下的商品列表
     *
     * @param nowPage
     * @param pageSize
     * @param typeId
     * @param userId
     * @return
     */
    List<Map<String, Object>> getGoodsByBussAndTypeID(int nowPage, int pageSize, int typeId, int userId);

    /**
     * 是否还有在线的商品
     *
     * @param busId
     * @return
     */
    Map<String, Object> getGoodsUpperNum(Integer busId);

    /**
     * 查询商家的全部商品
     *
     * @param bussId   商家编号
     * @param nowPage  当前页
     * @param pageSize @return
     * @return
     */
    List<Map<String, Object>> findAllGoodsList(Integer bussId, Integer nowPage, int pageSize);

    /**
     * 修改商品为特价商品
     *  @param goodsId
     * @param expirationTime
     * @param goodsDiscountPrice
     * @param discountNumber @return
     */
    boolean updateIsSpecial(Integer goodsId, Date expirationTime, BigDecimal goodsDiscountPrice, Integer discountNumber);

    /**
     *
     * @param bussId
     * @return
     */
    int getGoodsCountBYBusId(Integer bussId);

    /**
     *
     * @param nowPage
     * @param pageSize
     * @param goodsName
     * @param isSpecial
     * @param bussName
     * @param type
     * @return
     */
    Page findGoods(int nowPage, int pageSize, String goodsName, int isSpecial, String bussName, Integer type);

    /**
     *
     * @param id
     * @param isSpecial
     * @return
     */
    int noUpper(int id, Integer isSpecial);

    /**
     *
     * @param nowPage
     * @param pageSize
     * @param goodsName
     * @param busName
     * @return
     */
    Page noUpperList(int nowPage, int pageSize, String goodsName, String busName);

    /**
     *
     * @param id
     * @return
     */
    int yesUpper(int id);

    /**
     *
     * @param id
     * @return
     */
    int deleteGoodsById(int id);

    /**
     *
     * @param nowPage
     * @param pageSize
     * @param goodsName
     * @return
     */
    Page queryDayOffer(int nowPage, int pageSize, String goodsName);

    /**
     *
     * @param id
     * @param goodsName
     *@param nowPage
     * @param pageSize   @return
     */
    Page businessGoods(Integer id, String goodsName, int nowPage, int pageSize);

    /**
     *
     * @param companyTypeId
     * @param nowPage
     * @param pageSize
     * @param userId
     * @return
     */
    List<Map<String,Object>> findEquipmentList(int companyTypeId, int nowPage, int pageSize, int userId);


//    /**
//     * 修改是否参加活动的
//     *
//     * @param goodsId
//     * @return
//     */
//    int updateIsJoin(String goodsId);
}